import { Bot_msg } from "../../model/bot/bot_msg";
import server from "../../model/client/server";
import func from "../../model/func";
import { mathType, packge } from "../../model/msgHandle/packge";
import { prop_min_type } from "../../shared/interface";
import { style_default } from "../../style/default";

class index extends packge {
    constructor() {
        super()
    }
    init(): void {
        this.addMath(mathType.math_all, '背包', ((msg: Bot_msg) => { this.bag_default(msg) }), this)
        this.addMath(mathType.math_all, '默认背包', ((msg: Bot_msg) => { this.bag_default(msg) }), this,false)
        this.addMath(mathType.math_all, '装备背包', ((msg: Bot_msg) => { this.bag_equip(msg) }), this,false)
        this.addMath(mathType.math_all, '属性书背包', ((msg: Bot_msg) => { this.bag_attBook(msg) }), this,false)
        this.addMath(mathType.math_all, '宠物蛋背包', ((msg: Bot_msg) => { this.bag_egg(msg) }), this,false)

        this.addMath(mathType.math_all, '道具背包', ((msg: Bot_msg) => { this.bag_prop(msg) }), this,false)
        this.addMath(mathType.math_start, '使用', ((msg: Bot_msg) => { this.bag_use(msg) }), this,false)
        this.addMath(mathType.math_start, '查看', ((msg: Bot_msg) => { this.bag_look(msg) }), this)
        this.addMath(mathType.math_all, '钱包', ((msg: Bot_msg) => { this.wallet(msg) }), this)
        this.addMath(mathType.math_start, '丢弃', ((msg: Bot_msg) => { this.bag_destroy(msg) }), this)
        this.addMath(mathType.math_start, '拍卖', ((msg: Bot_msg) => { this.bag_sell(msg) }), this)
        this.addMath(mathType.math_all, '整理背包', ((msg: Bot_msg) => { this.bag_sort(msg) }), this,false)

        this.addMath(mathType.math_start, '传送', ((msg: Bot_msg) => { this.transferPoin(msg) }), this)
        this.addMath(mathType.math_all, '帮助背包', ((msg: Bot_msg) => { this.help('背包', msg) }), this,false)
    }
    async bag_sort(msg: Bot_msg) {
        server.api('bag/Sort', { }, msg)
        let req = await server.api('bag/List_filter', { filter: undefined }, msg);
        req && this.renderBag(msg, req.list, '默认');
    }
    bag_sell(msg: Bot_msg) {
        let sellInfo = msg.getContent().split('C');
        let idx = this.getNumber(sellInfo[0]);
        let num = this.getNumber(sellInfo[1]);
        if (!idx) {
            this.help('背包', msg)
            return;
        }
        server.api('auction/Sell', { idx: idx, num: num }, msg)
    }
    /**
    * 传送到世界指定地点
    * @param msg 
    */
    transferPoin(msg: Bot_msg) {
        let tPoin = msg.getContent().split('C');

        let x = this.getNumber(tPoin[0]);
        let y = this.getNumber(tPoin[1]);
        server.api('word/TransferPoin', { x: x, y: y }, msg);
    }

    bag_destroy(msg: Bot_msg) {
        let idx = this.getNumber(msg.getContent());
        if (idx <= 0) {
            msg.repeText('丢弃指令:丢弃 + 道具ID')
            return;
        }
        server.api('bag/Destroy', { idx: idx }, msg)
    }
    async wallet(msg: Bot_msg) {
        let req = await server.api('wallet/Look', {}, msg)
        if(!req){
            return;
        }
        let s= new style_default();
        s.setTitle('我的钱包', '💰')
        await s.addOne();
        
        s.addLine(`💰️(金币)${func.BN(req.gold)}`)
        s.addLine(`💎(钻石)${req.diamond}`)
        msg.repeText(s.end())
    }
    bag_look(msg: Bot_msg) {
        let lookIdx = this.getNumber(msg.getContent());
        if (lookIdx == 0) {
            msg.repeText('查看菜单')
            return;
        }
        server.api('bag/Look', { idx: lookIdx - 1 }, msg)
    }
    bag_use(msg: Bot_msg) {
        let useInfo = msg.getContent().split('C');
        let useIdx: any = useInfo[0];
        let useCont = this.getNumber(useInfo[1]);
        useIdx = this.getNumber(useInfo[0]);
        if (useCont <= 0) {
            useCont = 1;
        }
        server.api('bag/Use', { idx: useIdx, use: useCont, name: useInfo[0] }, msg)
    }
    async bag_prop(msg: Bot_msg) {
        let req = await server.api('bag/List_filter', { filter: prop_min_type.道具 }, msg);
        req && this.renderBag(msg, req.list, '道具');
    }
    async bag_equip(msg: Bot_msg) {
        let req = await server.api('bag/List_filter', { filter: prop_min_type.装备 }, msg);
        req && this.renderBag(msg, req.list, '装备');
    }
    async bag_attBook(msg: Bot_msg) {
        let req = await server.api('bag/List_filter', { filter: prop_min_type.属性书 }, msg);
        req && this.renderBag(msg, req.list, '属性书');
    }
    async bag_egg(msg: Bot_msg) {
        let req = await server.api('bag/List_filter', { filter: prop_min_type.宠物蛋 }, msg);
        req && this.renderBag(msg, req.list, '宠物蛋');
    }
    private async renderBag(msg: Bot_msg, list: any[], type: string) {
        let line = ``;
        let filter_list = ['默认', '装备', '属性书', '道具', '宠物蛋']
        for (let i = 0; i < filter_list.length; i++) {
            const element = filter_list[i];
            if (type == element) {
                line += `▲${element}`
            } else {
                line += `▷${element}背包`
            }
        }
        let style = new style_default();
        style.setTitle('我的背包','🎒')

        style.addLine(line)

        for (let i = 0; i < list.length; i++) {
            const element = list[i];
            const idx = i + 1;
            if (!element) {
                continue;
            }
            // let icon = element.icon || func.getPropType(element.type).icon
            if (element.type == prop_min_type.装备 || element.cont == 1) {
                style.addLine(`[${idx}]${element.name}`)
            } else {
                style.addLine(`[${idx}]${element.name}X${func.BN(element.cont)}`)
            }
        }
        if (list.length == 0) {
            style.addLine(`🎒你的${type}背包空空如也~`)
            await style.addOne()
        }
        style.help(`帮助背包`)

        style.toimg(msg.getFormId())
        // msg.repeText(style.end())
    }
    async bag_default(msg: Bot_msg) {
        let req = await server.api('bag/List_filter', { filter: undefined }, msg);
        req && this.renderBag(msg, req.list, '默认');
    }

}
export default new index();